package de.calette.mephisto3.util; import callete.api.services.impl.music.google.AlbumCoverCache; import callete.api.services.music.model.Album; import callete.api.services.resources.ImageResource; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.scene.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.imageio.ImageIO; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** */ public class ComponentUtil { private final static Logger LOG = LoggerFactory.getLogger(ComponentUtil.class); /** * Creates an image canvas with the given width and height. */ public static Canvas createImageCanvas(String url, double width, double height) { ImageView img = new ImageView(new Image(url, width, height, false, true)); final Canvas canvas = new Canvas(width, height); final GraphicsContext gc = canvas.getGraphicsContext2D(); gc.drawImage(img.getImage(), 0, 0); return canvas; } public static Label createLabel(String label, String cssClass, Pane parent) { Label l = new Label(label); l.getStyleClass().add("label-defaults"); l.getStyleClass().add(cssClass); parent.getChildren().add(l); return l; } public static Label createCustomLabel(String label, String cssClass, Pane parent) { Label l = new Label(label); l.getStyleClass().add(cssClass); parent.getChildren().add(l); return l; } public static Text createText(String label, String cssClass, Pane parent, Object userData) { Text l = new Text(label); l.getStyleClass().add("text-defaults"); l.getStyleClass().add(cssClass); parent.getChildren().add(l); l.setUserData(userData); return l; } public static Text createText(String label, String cssClass, Pane parent) { return createText(label, cssClass, parent, null); } public static ImageView loadAlbumCover(Album album, int width, int height) { String url = AlbumCoverCache.loadCover(album); return new ImageView(new Image(url, width, height, false, true)); } public static Image toFXImage(ImageResource image) { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(image.getImage(), image.getImageFormat(), os); InputStream is = new ByteArrayInputStream(os.toByteArray()); return new Image(is, image.getImage().getWidth(), image.getImage().getHeight(), false, true); } catch (Exception e) { LOG.error("Error converting buffered image to FX image: " + e.getMessage(), e); } return null; } }